/***********************************************************************************************************************
 * ############################################# Application AdewebLite #############################################
 * AdewebLite Android est une application permettant de consulter des emplois du temps fournis par l'université UHP
 * avec ou sans connexion internet (informations gardées en mémoire à chaque synchronisation). Et utilisant la web
 * API ADE pour collecter les données.
 * @author Andrianjafintrimo Victor, Zanette Sébastien
 * 
 * Basée sur l'application du même nom, utilisant le flux RSS (données à traiter), de :
 * @author Schnell Michaël, Zanette Sébastien
 * **********************************************************************************************************************
 */

package fr.ul.ade.prime.ui.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Spinner;
import fr.ul.ade.R;

/**
 * Champ 'Période' du formulaire de création/modification d'un emploi du temps.
 * @author Seb
 */
public class SchedulePeriod extends ParameterType
implements ParameterNames {
	
	private static final int DEFAULT_SELECTION = 0 ;

	private Integer period ;
	private LayoutInflater inflater ;
	private Spinner daySchedule ;
	private List<Integer> correspondance ;

	/**
	 * Constructeur.
	 * @param inflater
	 * @param period 
	 */
	public SchedulePeriod (LayoutInflater inflater, Integer period) {
		super(PARAMETER_PERIOD) ;
		this.inflater = inflater ;
		this.period = period ;
		this.initCorrespondance() ;
	}// SchedulePeriod (LayoutInflater, String)

	/**
	 * Retourne la valeur associé à la période choisie par l'utilisateur.
	 * @param view Vue
	 * @return valeur associé à la période choisie par l'utilisateur
	 */
	@Override
	public Integer getValue(View view) {
		this.daySchedule = (Spinner) view.findViewById(R.id.spinner) ;
		return this.getPeriodWithPosition(this.daySchedule.getSelectedItemPosition()) ;
	}// getValue(View)

	/**
	 * Retourne la vue du champ 'Période' (Liste déroulante).
	 * @param convertView vue du champ dans le formulaire de création/modification
	 * @param parent Vue parente
	 * @return vue du champ 'Période'
	 */
	@Override
	public View getView(View convertView, ViewGroup parent) {
		View v = this.inflater.inflate(R.layout.type_schedule_period, parent) ;
		this.daySchedule = (Spinner) v.findViewById(R.id.spinner) ;
		int selectedIndex = DEFAULT_SELECTION ;
		if (this.period != null) {
			selectedIndex = this.getPositionFromPeriod(this.period) ;
		}// if
		this.daySchedule.setSelection(selectedIndex) ;
		
		return v ;
	}// getView(View, ViewGroup)

	/**
	 * Initialise la liste de correspondance Texte -> Période
	 * 1 semaine = 7
	 * 2 semaines = 14
	 * 3 semaines = 21
	 * 1 mois = 28
	 */
	public void initCorrespondance() {
		this.correspondance = new ArrayList<Integer>() ;
		@SuppressWarnings("boxing")
		Integer[] values = new Integer[]{7, 14, 21, 28} ;
		this.correspondance.addAll(Arrays.asList(values)) ;
	}// initCorrespondance()

	/**
	 * Récupère l'index de la période dans la liste.
	 * @param period Période
	 * @return l'index de la période
	 */
	public int getPositionFromPeriod(Integer periodValue) {
		return this.correspondance.indexOf(periodValue) ;
	}// getPositionFromPeriod(Integer)

	/**
	 * Récupère la période avec son index dans la liste.
	 * @param position index de l'item selectionné dans le spinner
	 * @return la période associé à l'item selectionné dans le spinner
	 */
	public Integer getPeriodWithPosition(int position) {
		return this.correspondance.get(position) ;
	}// getPeriodWithPosition(int)

}
